package cn.feizhu.aimarket.ai.workflow.model.constant;

/**
 * 记录智能内容生成工作流中各个节点与状态的常量定义
 * 对应流程：智能判断 → 指令处理 → 大纲生成 → 人类反馈 → 多节点生成 → 聚合 → 可视化 → 返回URL
 *
 * @author feizhu
 * @since 2025/10/16
 */
public class WorkflowControlConstant {

    /** 智能判断节点 */
    public static final String SMART_CHECK = "smart_check";

    /** 指令处理节点（指令分发器） */
    public static final String COMMAND_HANDLE = "command_handle";

    /** 大纲生成节点 */
    public static final String OUTLINE_GENERATE = "outline_generate";

    /** 大纲检查和修复节点 */
    public static final String OUTLINE_CHECK = "outline_check";

    /** 人类反馈节点 */
    public static final String HUMAN_FEEDBACK = "human_feedback";

    /** 多文档生成节点 */
    public static final String MULTI_GENERATE = "multi_generate";

    /** 聚合节点 */
    public static final String AGGREGATE = "aggregate";

    /** 可视化节点 */
    public static final String VISUALIZE = "visualize";

    /** 返回URL节点 */
    public static final String RETURN_URL = "return_url";

    // ==================== 智能判断相关常量 ====================

    /** 智能判断分支 - 通过 */
    public static final String BRANCH_PASS = "pass";

    /** 智能判断分支 - 失败 */
    public static final String BRANCH_FAIL = "fail";

    /** 人类反馈分支 - 继续执行（确认通过） */
    public static final String BRANCH_CONTINUE = "continue";

    /** 人类反馈分支 - 重试（重新生成大纲） */
    public static final String BRANCH_RETRY = "retry";

    /** 用户输入（上下文key）- 数据类型: String */
    public static final String USER_INPUT = "user_input";

    // TODO 注意大纲用实体类存了
    // TODO 这个流程应该还是String，只有检查节点过后采用NovelOutlineResponse进行接收
    /** 内容大纲（上下文key）- 数据类型: NovelOutlineResponse */
    public static final String OUTLINE = "outline";

    /** 人类反馈内容（上下文key）- 数据类型: String */
    public static final String FEEDBACK = "feedback";

    /** 子文档集合（上下文key）- 数据类型: List<String> */
    public static final String SUB_DOCS = "sub_docs";

    /** 可视化结果URL（上下文key）- 数据类型: String */
    public static final String VISUAL_URL = "visual_url";

    // ==================== 节点间传递的中间状态数据类型说明 ====================

    /** 处理后的指令信息 - 数据类型: String */
    public static final String PROCESSED_COMMAND = "processed_command";

    /** 智能判断结果 - 数据类型: String (值: "PASS" 或 "FAIL") */
    public static final String JUDGE_RESULT = "judge_result";

    /** 反馈处理结果 - 数据类型: String (值: "APPROVED", "NEEDS_REVISION", "ERROR") */
    public static final String FEEDBACK_RESULT = "feedback_result";

    /** 聚合后的完整内容 - 数据类型: String */
    public static final String AGGREGATED_CONTENT = "aggregated_content";

    /** 聚合统计信息 - 数据类型: Map<String, Object> */
    public static final String AGGREGATE_STATS = "aggregate_stats";

    /** 可视化数据 - 数据类型: Map<String, Object> */
    public static final String VISUALIZATION_DATA = "visualization_data";

    /** 最终返回URL - 数据类型: String */
    public static final String FINAL_URL = "final_url";

    /** 响应消息 - 数据类型: String */
    public static final String RESPONSE_MESSAGE = "response_message";

    /** 处理结果摘要 - 数据类型: Map<String, Object> */
    public static final String PROCESSING_RESULT = "processing_result";

    /** 工作流状态 - 数据类型: String (值: "COMPLETED", "ERROR", "IN_PROGRESS") */
    public static final String WORKFLOW_STATUS = "workflow_status";

    // ==== 用户ID和应用ID等元信息常量 ====
    /** 用户ID 采用 String格式防止自动转为int然后精度丢失 */
    public static final String USER_ID = "user_id";
    /** 应用ID 采用 String格式防止自动转为int然后精度丢失 */
    public static final String APP_ID = "app_id";

    private WorkflowControlConstant() {
        // 禁止实例化
    }
}
